从keystore(jks)文件中提取私钥

您所在的位置:网站首页 openssl keystore 从keystore(jks)文件中提取私钥

从keystore(jks)文件中提取私钥

2023-08-13 12:39| 来源: 网络整理| 查看: 265

JKS文件是使用keytool生成的keystore文件,存放私钥和证书。但是我们用keytool的时候,私钥并没有单独生成出来。这个不利于我们后期的一些扩展工作。所以,我们需要把私钥从keytool中提取出来。

 

经过研究,确认如下两种方法是可靠的。

 

方案1:使用OpenSSL工具来完成1、从JKS转换到PKCS12D:\ssl>keytool -importkeystore -srckeystore keystore_old.jks -destkeystore keystore_old.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass changeit -deststorepass changeit -srcalias tom_server -destalias xxx -srckeypass changeit -destkeypass changeit -noprompt2、从PKCS12转换成PEM格式openssl pkcs12 -in keystore_old.p12 -out keystore_old.pem -passin pass:changeit -passout pass:changeit3、用记事本打开PEM格式文件,从PEM格式的certificate chain中取出私钥,保存为privateKey.key4、生成私钥openssl rsa -in privateKey.key -check私钥将被显示在命令行界面上方案2:Keystore是一个密码保护的文件,存放私钥和证书。可以通过JDK自带的keytool工具生成。但是keytool工具,并没有提供方便的方法,从keystore文件中到处私钥和证书。所以可以通过JDK提供的java.security.KeyStore 类来编码完成相关工作。   import java.io.File;     import java.io.FileInputStream;     import java.io.FileWriter;     import java.security.Key;     import java.security.KeyPair;     import java.security.KeyStore;     import java.security.KeyStoreException;     import java.security.NoSuchAlgorithmException;     import java.security.PrivateKey;     import java.security.PublicKey;     import java.security.UnrecoverableKeyException;     import java.security.cert.Certificate;     import sun.misc.*;     public class ExportPrivateKey {     private File keystoreFile;     private String keyStoreType;     private char[] password;     private String alias;     private File exportedFile;     public static KeyPair getPrivateKey(KeyStore keystore, String alias, char[] password) {     try {     Key key=keystore.getKey(alias,password);     if(key instanceof PrivateKey) {     Certificate cert=keystore.getCertificate(alias);     PublicKey publicKey=cert.getPublicKey();     return new KeyPair(publicKey,(PrivateKey)key);     }     } catch (UnrecoverableKeyException e) {     } catch (NoSuchAlgorithmException e) {     } catch (KeyStoreException e) {     }     return null;     }     public void export() throws Exception{     KeyStore keystore=KeyStore.getInstance(keyStoreType);     BASE64Encoder encoder=new BASE64Encoder();     keystore.load(new FileInputStream(keystoreFile),password);     KeyPair keyPair=getPrivateKey(keystore,alias,password);     PrivateKey privateKey=keyPair.getPrivate();     String encoded=encoder.encode(privateKey.getEncoded());     FileWriter fw=new FileWriter(exportedFile);     fw.write("—–BEGIN PRIVATE KEY—–\n");     fw.write(encoded);     fw.write("\n");     fw.write("—–END PRIVATE KEY—–");     fw.close();     }     public static void main(String args[]) throws Exception{     ExportPrivateKey export=new ExportPrivateKey();     export.keystoreFile=new File("/Users/Luke/Workspace/StringTest/src/com/lukejin/stringtest/keystore.jks");     export.keyStoreType="JKS";     export.password="changeit".toCharArray();     export.alias="tom_server";     export.exportedFile=new File("luke");     export.export();     }     }  



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3